// pages/cuesAdd/index.ts

import { fontSizeCalc, handleCode, handleErrCode, isBeforeNowTime } from "../../utils/util";
import {
  getShareAccountPage,
  saveCuesTopic,
  saveCuesTopicTreeAssignOrganization
} from "../../service/api/api-cues-topic";

const rules = [{
  name: "name",
  rule: ["required"],
  msg: ["请输入标题"]
}, {
  name: "deadline",
  rule: ["required"],
  msg: ["请选择日期"]
}]

let dateTime, toast;

let baseSubPlan = {
  id: "",
  name: "",
  describes: "",
}
let organizationIds = new Set(),// 选中的id
  organizationNames = new Set(),// 选中的名字
  shareUserIds = new Set(),// 选中的用户id
  shareUserNames = new Set();// 选中的用户名字

Page({

  /**
   * 页面的初始数据
   *
   */
  data: {
    plan: {
      deadline: "",// 截止时间
      isAssign: 0,// 选了指定单位：1，未选：0
      name: "",// 标题
      assignOrganizationIds: [],// 指派单位id
      assignOrganizationNames: [],// 指派单位名称
      topicPlans: [],// 任务列表
      createdSource: 2,//创建来源（2小程序）
    },// 纪录详情
    access: {} as any,// 当前用户权限
    currentUser: {},// 当前用户信息
    alertSubPlan: {},// 弹窗子类任务
    alertSubPlanIndex: -1,// 弹窗子类任务id
    organizations: [],// 当前组织信息
    shareAccounts: [],// 当前可指派的用户列表
    subPlanList: [],// 计划列表
    showUnitList: '',// 选择的指派单位
    showUserList: '',// 选择的指派用户
    options: '',
    unitDrawerVisible: false,// 右侧抽屉是否显示
    userDrawerVisible: false,// 右侧抽屉是否显示
    alertShow: false,// 弹窗提示
    title: '',// 标题
    remarks: '',// 备注

    iconSize: fontSizeCalc(30),
    labelSize: fontSizeCalc(32),
    inputSize: fontSizeCalc(32),
    overFontSize: fontSizeCalc(32),
    btnHeight: fontSizeCalc(96) + 'rpx',
    btnLineHeight: fontSizeCalc(70) + 'rpx',
    subLabelSize: fontSizeCalc(26),
    subBtnHeight: fontSizeCalc(48) + 'rpx',
    subBtnLineHeight: fontSizeCalc(20) + 'rpx',
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    let _that = this;
    this.getTreeFun();
    this.getShareAccountFun();
    const { globalData: { access, currentUser }, windowWidth } = getApp();
    let size = windowWidth >= 480 ? 26 : 32;
    this.setData({
      access,
      currentUser,
      options: JSON.stringify(options),
    })
    setTimeout(() => {
      _that.setData({
        inputSize: fontSizeCalc(size),
      })
    }, 500)
  },

  /**
   * 获取树结构
   */
  async getTreeFun() {
    let _that = this;
    // 执行搜索函数
    await saveCuesTopicTreeAssignOrganization().then(async (res) => {
      if (res?.data) {
        // const parent = [
        //     {
        //         name: '壁媒通',
        //         id: "0",
        //         children: Array.isArray(res.data) ? res.data : [],
        //     }
        // ]
        _that.setData({
          organizations: _that.readyTreeData(res?.data)
        })
      }
    })
  },

  /**
   * 获取可选用户列表
   */
  async getShareAccountFun() {
    let _that = this;
    // 执行搜索函数
    await getShareAccountPage({
      current: 1,
      pageSize: 1000
    }).then(async (res) => {
      if (res?.data) {
        _that.setData({
          shareAccounts: _that.readyTreeData(
            Array.isArray(res.data?.data) ? res.data?.data : [], true
          )
        })
      }
    })
  },

  /**
   * 预备Tree结构数据
   * @param data
   * @param showUnit 是否显示单位
   */
  // readyTreeData(data, showUnit?: Boolean): any {
  //     let treeData = [];
  //     if (Array.isArray(data) && data) {
  //         data.forEach((val) => {
  //             const disabled = !showUnit && val.isFolder === 1 && !val.children?.length;// 是否能选
  //             treeData.push({
  //                 text: (showUnit ? val.organizationName + ' - ': '') + val.name,
  //                 value: val.id,
  //                 item: val,
  //                 children: this.readyTreeData(val.children, showUnit),
  //                 collapsed: false,// 默认展开
  //                 checked: false,// 默认选中
  //                 disabled
  //                 // icon: val.isFolder === 0 ? 1 : 0,
  //             });
  //         });
  //     }
  //     return treeData;
  // },
  readyTreeData(data, showUnit?: Boolean): any {
    let treeData = [];
    if (data) {
      data.forEach((val) => {
        if (val.isFolder === 1 && val.children === undefined) {
        } else {
          treeData.push({
            name: val.name,
            id: val.id,
            parentId: val.parentId,
            checkbox: true,
            isFolder: val.isFolder,
            isChildren: val.children === undefined ? 0 : 1,
            children: this.readyTreeData(val.children as AdminOrganizationData.Organization[]),
          });
        }
      });
    }
    return treeData;
  },
  /**
   * 单位树节点 修改
   */
  unitTreeNodeChange(e) {
    const { names, idList } = e.detail;
    organizationIds.clear()
    organizationNames.clear()
    console.log(names, idList, organizationIds, organizationNames);
    const nameString = names.join('/').substring(0, 10);
    idList.forEach(id => organizationIds.add(id));
    names.forEach(id => organizationNames.add(id));
    console.log(organizationIds, organizationNames);
    this.setData({
      showUnitList: nameString
    })
  },
  // unitTreeNodeChange(res: { detail: any; }) {
  //     const detail = res?.detail;
  //     this.getChildrenValue(detail)
  //     this.setData({
  //         showUnitList: Array.from(organizationNames).toString()
  //     })

  // },

  /**
   * 用户树节点 修改
   */
  // userTreeNodeChange(res: { detail: any; }) {
  //     const detail = res?.detail;
  //     if (detail.checked) {// 选中了，就都加进去
  //         shareUserIds.add(detail.value);
  //         shareUserNames.add(detail.text);
  //     } else {// 没选中，找一下删掉
  //         shareUserIds.delete(detail.value)
  //         shareUserNames.delete(detail.text)
  //     }
  //     this.setData({
  //         showUserList: Array.from(shareUserNames).toString()
  //     })
  // },
  userTreeNodeChange(e) {
    const { names, idList } = e.detail;
    const nameString = names.join('/').substring(0, 10);
    idList.forEach(id => shareUserIds.add(id));
    this.setData({
      showUserList: nameString
    })
  },

  /**
   * 获取子类值
   */
  getChildrenValue(organ) {
    if (organ.checked) {// 选中了，就都加进去
      organizationIds.add(organ.value);
      organizationNames.add(organ.text);
    } else {// 没选中，找一下删掉
      organizationIds.delete(organ.value)
      organizationNames.delete(organ.text)
    }
    if (organ.children) {
      organ.children.forEach(item => {
        this.getChildrenValue(item)
      })
    }
  },

  /**
   * 显示侧面抽屉
   */
  showUnitDrawer() {
    this.setData({
      unitDrawerVisible: true
    })
  },

  /**
   * 关闭抽屉
   */
  closeUnitDrawer(e) {
    // console.log(e);
    this.setData({
      unitDrawerVisible: false,
    })
  },

  /**
   * 显示侧面抽屉
   */
  showUserDrawer() {
    this.setData({
      userDrawerVisible: true
    })
  },

  /**
   * 关闭抽屉
   */
  closeUserDrawer(e) {
    // console.log(e);
    this.setData({
      userDrawerVisible: false,
    })
  },

  /**
   * 显示删除二次提示
   */
  showAlert(e) {
    const detail = e?.detail || {};
    this.setData({
      alertSubPlan: detail.item,
      alertSubPlanIndex: detail.index,
      alertShow: true,
    })
  },

  /**
   * 关闭抽屉
   */
  hideAlert(e: any) {
    // console.log(e);
    this.setData({
      alertShow: false,
    })
  },

  /**
   * 显示时间选择
   */
  showDateTime(e) {
    dateTime.show();
  },

  /**
   * 时间确定
   * {year: Number,month: Number,result: String}
   */
  timeConfirm({ detail }) {
    //选择的结果
    this.setData({
      ['plan.deadline']: detail.result,
    })
  },

  /**
   * 时间取消
   */
  timeCancel() {
    this.setData({
      unitDrawerVisible: false
    })
  },

  /**
   * 创建子任务
   */
  addSubPlan() {
    const list = this.data.subPlanList;
    let newPlan = { ...baseSubPlan };
    newPlan.id = new Date().getTime();// 时间戳做id
    list.push({ ...newPlan });
    this.setData({
      subPlanList: list
    })
  },

  /**
   * 删除子任务
   */
  delSubPlan(e: any) {
    let { subPlanList, alertSubPlanIndex } = this.data;
    subPlanList.splice(alertSubPlanIndex, 1);// 删掉当前的
    this.setData({
      subPlanList: subPlanList
    })
    this.hideAlert({});
  },

  /**
   * 子任务名称修改
   */
  subPlanNameInput(e: any) {
    const { detail, target } = e;
    const { item, index } = target.dataset || {}
    let { subPlanList } = this.data;
    subPlanList[index].name = detail;
    this.setData({
      subPlanList: subPlanList
    })
  },

  /**
   * 子任务描述修改
   */
  subPlanDescInput(e: any) {
    const { detail, target } = e;
    const { item, index } = target.dataset || {}
    let { subPlanList } = this.data;
    subPlanList[index].describes = detail;
    this.setData({
      subPlanList: subPlanList
    })
  },

  /**
   * 提交验证
   */
  submit() {
    let { plan, title, subPlanList, organizations } = this.data;
    let formData = {
      name: title,
      deadline: plan.deadline,
    }
    if (isBeforeNowTime(plan.deadline)) {
      return
    }
    this.selectComponent("#form").validate(formData, rules).then(res => {
      if (!subPlanList.length) {// 没有添加计划
        this.showToast('请至少添加一个任务')
        return
      }
      let isPass = false
      subPlanList.map((item) => {
        if (isPass === false) {
          if (item.name === '' || item.describes === '') {// 没有添加计划
            isPass = true
            this.showToast('请输入名称和描述')
            return
          }
        }
      })
      if (isPass === true) {
        return
      }
      console.log(subPlanList, isPass);
      // 处理选择的指派单位
      if (organizationIds.size) {// 选择了就去找选中的
        // this.unitTreeNodeChange({detail: organizations[0]});// 主动执行一下
        plan.assignOrganizationIds = Array.from(organizationIds);
        plan.assignOrganizationNames = Array.from(organizationNames);
        plan.isAssign = 1;
      } else {// 没有选就指定全部，删掉这两个字段
        delete plan.assignOrganizationIds;
        delete plan.assignOrganizationNames;
        plan.isAssign = 0;
      }
      // 处理选择的指派用户
      if (shareUserIds.size) {// 选择了就去找选中的
        plan.shareAccountIds = Array.from(shareUserIds);
        plan.isShare = 1;
      } else {// 没有选就指定全部，删掉这个字段
        delete plan.shareAccountIds;
        plan.isShare = 0;
      }
      plan.name = title;
      plan.topicPlans = subPlanList;
      this.saveFun(plan)
    }).catch(errors => {
      console.log(errors)
    })
  },

  /**
   * 保存函数
   */
  async saveFun(params) {
    wx.showLoading({
      title: "加载中..."
    })
    await saveCuesTopic(params).then(async (res) => {
      if (res?.code === 0) {
        wx.hideLoading()
        handleCode(res, '新增成功');
        setTimeout(() => {
          wx.navigateBack({
            delta: 1
          })// 回到上一个界面
        }, 1000)
      } else {
        handleErrCode()
      }
    }).catch(e => {
      handleErrCode(e)
    })
  },

  /**
   * 显示提示
   */
  showToast(title) {
    let params = {
      title,
    }
    toast && toast.show(params);
  },


  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    dateTime = this.selectComponent("#dateTime")
    toast = this.selectComponent("#toast")
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    wx.hideShareMenu({
      menus: ['shareAppMessage', 'shareTimeline'],// 隐藏分享到朋友和分享到朋友圈
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  taskExecuteShareFun() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})